<!DOCTYPE html>
<html lang="zh-cn"><head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    
    <link href="/css/bootstrap.min.css" rel="stylesheet">
    <link href="/css/main.css" rel="stylesheet">

    <link rel="shortcut icon" type="image/x-icon" href="/img/favicon.ico" />

    <title>grep命令 | wiseAI的小站</title>
</head><body><div class="container-fluid">
    <nav class="navbar fixed-top navbar-expand-sm navbar-dark bg-dark">
        <div class="container-fluid">
            <a class="navbar-brand" href="/">
                <img src="/img/favicon.ico" alt="" width="30" height="24" class="d-inline-block align-text-top">
                wiseAI的小站
            </a>
            <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
                <span class="navbar-toggler-icon"></span>
            </button>
            <div class="collapse navbar-collapse" id="navbarSupportedContent">
                <ul class="navbar-nav me-auto mb-2 mb-lg-0">
                    
                    <li class="nav-item">
                        <a  class="nav-link"   href="/articles/">文章</a>
                    </li>
                    
                    <li class="nav-item">
                        <a  class="nav-link"   href="/categories/">分类</a>
                    </li>
                    
                    <li class="nav-item">
                        <a  class="nav-link"   href="/tags/">关键字</a>
                    </li>
                    
                    <li class="nav-item">
                        <a  class="nav-link"   href="/post/golang/">golang编程</a>
                    </li>
                    
                    <li class="nav-item">
                        <a  class="nav-link"   href="/about/">关于</a>
                    </li>
                    
                </ul>
                <form class="d-flex">
                    <input id="search-query" class="form-control me-2" type="search" placeholder="Search for anything..." aria-label="Search">
                </form>
            </div>
        </div>
    </nav>
</div>




<div id="content">
<div class="container article">
	<h1>grep命令</h1>
	<div class="post-meta">
		<div>
			
			
			By wiseai | 2022-07-06 | 2 minutes
		</div>
		<div class="tags">
			
			<a class="btn btn-light links btn-sm" href="/tags/%E5%91%BD%E4%BB%A4/">命令</a>
			
		</div>
	</div>
	<div>
		<div class="article-post">
			<p>基本格式：grep  expression</p>
<p><strong>1.主要参数</strong></p>
<p>[options]主要参数：</p>
<pre tabindex="0"><code>-c：只输出匹配行的计数。
-i：不区分大小写
-h：查询多文件时不显示文件名。
-l：查询多文件时只输出包含匹配字符的文件名。
-n：显示匹配行及行号。
-s：不显示不存在或无匹配文本的错误信息。
-v：显示不包含匹配文本的所有行。
-r：查询目录及子目录下的文件包含匹配字符的文件名。
-A：后面跟一个数字（有无空格都可以），例如-A2表示打印符合要求的行以及下面两行。
-B：后面跟一个数字，例如-B2表示打印符合要求的行以及上面两行。
-C：后面跟一个数字，例如-C2表示打印符合要求的行以及上下各两行。
--color=auto：颜色显示
</code></pre><p>pattern正则表达式主要参数：</p>
<pre><code>\： 忽略正则表达式中特殊字符的原有含义。
^：匹配正则表达式的开始行。
$: 匹配正则表达式的结束行。
\&lt;：从匹配正则表达 式的行开始。
\&gt;：到匹配正则表达式的行结束。
[ ]：单个字符，如[A]即A符合要求 。
[ - ]：范围，如[A-Z]，即A、B、C一直到Z都符合要求 。
.：所有的单个字符。
* ：有字符，长度可以为0。
</code></pre>
<p><strong>2.实例</strong></p>
<pre><code>(1)grep 'test' d*　　#显示所有以d开头的文件中包含 test的行

(2)grep 'test' aa bb cc 　　 #显示在aa，bb，cc文件中包含test的行

(3)grep '[a-z]\{5\}' aa 　　#显示所有包含每行字符串至少有5个连续小写字符的字符串的行

(4)grep magic /usr/src　　#显示/usr/src目录下的文件(不含子目录)包含magic的行

(5)grep -r magic /usr/src　　#显示/usr/src目录下的文件(包含子目录)包含magic的行

(6)grep -w pattern files ：只匹配整个单词，而不是字符串的一部分(如匹配'magic'，而不是'magical')
</code></pre>
<p><strong>过滤出带有某个关键词的行，并输出行号</strong></p>
<pre tabindex="0"><code># grep -n &#39;root&#39; /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
</code></pre><p>说明: 前面的数字显示为绿色，表示行号。</p>
<p><strong>过滤出不带有某个关键词的行，并输出行号</strong></p>
<pre tabindex="0"><code># grep -nv &#39;nologin&#39; /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
6:sync:x:5:0:sync:/sbin:/bin/sync
7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8:halt:x:7:0:halt:/sbin:/sbin/halt
45:aminglinux:x:1000:1000:aminglinux:/home/aminglinux:/bin/bash
</code></pre><p><strong>过滤出所有包含数字的行</strong></p>
<pre tabindex="0"><code># grep &#39;[0-9]&#39; /etc/inittab
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
</code></pre><p>说明: 只要有一个数字就算匹配到了。</p>
<p><strong>过滤出所有不包含数字的行</strong></p>
<pre tabindex="0"><code># grep -v &#39;[0-9]&#39; /etc/inittab
# inittab is no longer used.
#
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
#
# systemd uses &#39;targets&#39; instead of runlevels. By default, there are two main targets:
#
#
# To view current default target, run:
# systemctl get-default
#
# To set a default target, run:
# systemctl set-default TARGET.target
</code></pre><p>说明：和上一例的结果正好相反，只要是包含一个数字，就不显示。</p>
<p><strong>过滤掉所有以#开头的行</strong></p>
<p>操作样例文档/etc/sos.conf的内容如下：</p>
<pre tabindex="0"><code>[plugins]
#disable = rpm, selinux, dovecot

[tunables]
#rpm.rpmva = off

#general.syslogsize = 15
# grep -v &#39;^#&#39; /etc/sos.conf
[plugins]

[tunables]
</code></pre><p>说明：这里面是含有空行的。</p>
<p>那如何将空行删除呢?示例命令如下：</p>
<pre tabindex="0"><code># grep -v &#39;^#&#39; /etc/sos.conf |grep -v &#39;^$&#39;
[plugins]
[tunables]
在正则表达式中，^表示行的开始，$表示行的结尾，那么空行则可以用^$表示。如何打印出不以英文字母开头的行呢？我们先来自定义一个文件，如下所示：
# mkdir /tmp/1
# cd /tmp/1
# vim test.txt //内容如下
123
abc
456
abc2323
#laksdjf
Alllllllll
</code></pre><p>接下来看两个例子：</p>
<pre tabindex="0"><code># grep &#39;^[^a-zA-Z]&#39; test.txt
123
456
#laksdjf
# grep &#39;[^a-zA-Z]&#39; test.txt
123
456
abc2323
#laksdjf
</code></pre><p>前面也提到过中括号[]的应用，如果是数字就用[0-9]这样的形式（当遇到类似[15]的形式时，表示只含有1或者5）。如果要过滤数字以及大小写字母，则要写成类似[0-9a-zA-Z]的形式。另外，[^字符]表示除[]内字符之外的字符。请注意，把^写到方括号里面和外面是有区别的。</p>
<p><strong>过滤出任意一个字符和重复字符</strong></p>
<pre tabindex="0"><code># grep &#39;r.o&#39; /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
</code></pre><p>.表示任意一个字符。上例中，r.o表示把r与o之间有一个任意字符的行过滤出来。</p>
<pre tabindex="0"><code># grep &#39;ooo*&#39; /etc/passwd
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
setroubleshoot:x:981:979::/var/lib/setroubleshoot:/sbin/nologin
*表示零个或多个*前面的字符。上例中，ooo*表示oo、ooo、oooo...或者更多的o。

# grep &#39;.*&#39; /etc/passwd |wc -l
45
# wc -l /etc/passwd
45 /etc/passwd
</code></pre><p>上例中，.*表示零个或多个任意字符，空行也包含在内，它会把/etc/passwd文件里面的所有行都匹配到，你也可以不加|wc -l看一下效果。</p>
<p><strong>指定要过滤出的字符出现次数</strong></p>
<pre tabindex="0"><code># grep &#39;o\{2\}&#39; /etc/passwd
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
setroubleshoot:x:981:979::/var/lib/setroubleshoot:/sbin/nologin
这里用到了符号{}，其内部为数字，表示前面的字符要重复的次数。需要强调的是，{}左右都需要加上转义字符\。另外，使用“{ }”还可以表示一个范围，具体格式为{n1,n2}，其中n1 &lt; n2，表示重复n1到n2次前面的字符，n2还可以为空，这时表示大于等于n1次。
除grep工具外，阿铭也常常用到egrep这个工具，后者是前者的扩展版本，可以完成grep不能完成的工作。下面阿铭介绍egrep不同于grep的几个用法。为了试验方便，阿铭把test.txt编辑成如下内容：
rot:x:0:0:/rot:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
operator:x:11:0:operator:/rooot:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash
1111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
</code></pre><p><strong>过滤出一个或多个指定的字符</strong></p>
<pre tabindex="0"><code># egrep &#39;o+&#39; test.txt
rot:x:0:0:/rot:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
operator:x:11:0:operator:/rooot:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash
# egrep &#39;oo+&#39; test.txt
operator:x:11:0:operator:/root:/sbin/nologin
operator:x:11:0:operator:/rooot:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash
# egrep &#39;ooo+&#39; test.txt
operator:x:11:0:operator:/rooot:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash
和grep不同，这里egrep使用的是符号+，它表示匹配1个或多个+前面的字符，这个“+”是不支持被grep直接使用的。包括上面的{}，也是可以直接被egrep使用，而不用加\转义。示例如下：
# egrep &#39;o{2}&#39; /etc/passwd
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
setroubleshoot:x:981:979::/var/lib/setroubleshoot:/sbin/nologin
</code></pre><p><strong>过滤出零个或一个指定的字符</strong></p>
<pre tabindex="0"><code># egrep &#39;o?&#39; test.txt
rot:x:0:0:/rot:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
operator:x:11:0:operator:/rooot:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash
1111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
# egrep &#39;ooo?&#39; test.txt
operator:x:11:0:operator:/root:/sbin/nologin
operator:x:11:0:operator:/rooot:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash
# egrep &#39;oooo?&#39; test.txt
operator:x:11:0:operator:/rooot:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash
</code></pre><p><strong>过滤出字符串1或者字符串2</strong></p>
<pre tabindex="0"><code># egrep &#39;aaa|111|ooo&#39; test.txt
operator:x:11:0:operator:/rooot:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash
1111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
</code></pre><p><strong>egrep中()的应用</strong></p>
<pre tabindex="0"><code># egrep &#39;r(oo|at)o&#39; test.txt
operator:x:11:0:operator:/root:/sbin/nologin
operator:x:11:0:operator:/rooot:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash
这里用()表示一个整体，上例中会把包含rooo或者rato的行过滤出来，另外也可以把()和其他符号组合在一起，例如(oo)+就表示1个或者多个oo。如下所示：
# egrep &#39;(oo)+&#39; test.txt
operator:x:11:0:operator:/root:/sbin/nologin
operator:x:11:0:operator:/rooot:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash
</code></pre>
		</div>
	</div>
</div>


<div class="container">
    
    <div class="row">
        
        <div class="col-5">
            <a class="page-link link-dark text-end dh" href="/post/kill%E5%91%BD%E4%BB%A4/">
                <h5>前一篇</h5><br>
                kill命令
            </a>            
        </div>
        
        <div class="col-2">
        </div>
        
        <div class="col-5">
            <a class="page-link link-dark text-start dh" href="/post/find%E5%91%BD%E4%BB%A4/">
                <h5>后一篇</h5><br>
                find命令
            </a>            
        </div>
        
    </div>
    
</div>

        </div><br><br>
<footer class="container">
    <h2>友情链接</h2>
    <hr>
    <nav class="nav nav-pills flex-column flex-sm-row">
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://wiseai.gitee.io/pages/gnzg/index.html" target="_blank">孤鸟之歌</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://wiseai.gitee.io/pages/mm/index.html" target="_blank">生成随机字符</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://wiseai.gitee.io/pages/md/index.html" target="_blank">MarkDown</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://gitee.com/" target="_blank">Gitee</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://github.com/" target="_blank">Github</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://www.aliyun.com/" target="_blank">阿里云</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://cloud.tencent.com/" target="_blank">腾讯云</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://www.oschina.net/" target="_blank">OSCHINA开源中国</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://gitee.com/wiseai/the-way-to-go_ZH_CN/blob/master/eBook/directory.md" target="_blank">the way to go</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://topgoer.com/" target="_blank">golang文档</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://goframe.org/display/gf" target="_blank">GoFrame</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://www.aliyundrive.com/" target="_blank">阿里云盘</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://cn.vuejs.org/" target="_blank">vue3文档</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://element-plus.gitee.io/zh-CN/" target="_blank">element-plus文档</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://www.runoob.com/vue3/vue3-tutorial.html" target="_blank">vue3菜鸟教程</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://v5.bootcss.com/" target="_blank">bootstrap v5 中文文档</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://www.bootstrap.cn/" target="_blank">bootstrap文档</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://caddy2.dengxiaolong.com/docs/" target="_blank">caddy中文教程</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://www.58pic.com/" target="_blank">千图</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://ifonts.com/" target="_blank">iFonts</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://marketing.qiniu.com/" target="_blank">七牛云</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://www.ixigua.com/" target="_blank">西瓜视频</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://wiseai.gitee.io/pages/yugang/index.html" target="_blank">鱼缸计算</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://justcc.mengkang.net/#/" target="_blank">C语言JustCC</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://wiseai.gitee.io/pages/pptist/" target="_blank">PPTist</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="/index.xml" target="_blank">RSS</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://www.kancloud.cn/idcpj/python/418553" target="_blank">参考资料</a>
        
    </nav>

    <div class="copyright text-center">
      <span class="power-by">
        Powered by <a class="links" href="https://gohugo.io" target="_blank">Hugo</a>
    </span>
    <span>|</span>
    <span>
        Theme - <a class="links" href="https://github.com/wiseai-go/blog-hugo" target="_blank">WiseAI</a>
    </span>
    <br>
    <span class="copyright-year">
        &copy;
        
        2017 -
        2023<span>
            陇ICP备15000157号
            
        </span></span>

</div>
</footer>
<script src="/js/bootstrap.bundle.min.js"></script>


</body>
</html>
